iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Modern Web

我與 ASP.NET Core 的 30天系列 第 16

[Day16] Logging 記錄管理 - 我與 ASP.NET Core 3 的 30天

  • 分享至 

  • xImage
  •  

紀錄檔記錄(Logging)是指儲存紀錄檔的行為。在應用程式中可以紀錄使用的行為、例外事件的訊息等,最簡單的做法是將紀錄檔寫入單個存放紀錄檔的檔案。

建立紀錄

ASP.NET Core內建的DI就為會注入Logging的服務。
下方範例建立一個ApiController,注入Logging服務並建立紀錄

[ApiController]
[Route("api/[controller]")]
public class LoggingSampleController
{
    private readonly ILogger<LoggingSampleController> _logger;

    public LoggingSampleController(ILogger<LoggingSampleController> logger)
    {
        _logger = logger;
    }

    public ActionResult<string> Get()
    {
        _logger.LogWarning("LogginSample in");
        return "Logging Page!!";
    }
}

ILogger建立物件時,會指定分類。該類別會包含在每個由該 ILogger 執行個體所產生的記錄訊息中。

執行後的輸出結果:
https://ithelp.ithome.com.tw/upload/images/20201001/20129389lGc7BLWDaX.png

除了預設的設定,ASP.NET Core還提供了多個內建紀錄提供者可以選擇。

內建記錄提供者(Logging provider)

記錄提供者(Logging provider)會儲存記錄檔,但 Console 顯示記錄的provider除外。
ASP.NET Core 包括下列記錄提供者:

名稱 使用方式 描述
Console(預設已加入) logging.AddConsole(); 會將輸出記錄到主控台。
Debug(預設已加入) logging.AddDebug(); 會使用 system.servicemodel 類別來寫入System.Diagnostics.Debug記錄輸出。
EventSource logging.AddEventSourceLogger(); 會寫入名為的跨平臺事件來源 Microsoft-Extensions-Logging。
EventLog(僅限Windows) logging.AddEventLog(); 會將記錄輸出傳送至 Windows 事件記錄檔。
Azure App Service logging.AddAzureWebAppDiagnostics(); 將記錄寫入至 Azure App Service 應用程式檔案系統中的文字檔,並寫入至 Azure 儲存體帳戶中的 Blob 儲存體。(須先安裝Microsoft.Extensions.Logging.AzureAppServices套件)

要更換Logging provider,可以從Program.cs中修改成下列範例:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddConsole();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

呼叫 ClearProviders ,以從產生器中移除所有 ILoggerProvider 實例。
加入Console記錄提供者。

設定記錄

記錄設定通常是由 appsettings.json 的 Logging區段所提供。透過appsettings.{Environment}.json可以依照不同環境套用不同的設定
https://ithelp.ithome.com.tw/upload/images/20201001/20129389a50fswthUM.png
紀錄等級(Logging:LogLevel)用來設定不同紀錄類別下的紀錄詳細程度

  • Trace, Debug, Information, Warning, Error, Critical, None

記錄等級

|LogLevel |Value|方法|描述 |
|-----|--------|-----|
|Trace|0 |LogTrace| 包含最詳細的訊息。 這些訊息可能包含敏感性應用程式資料。 這些訊息預設為停用,且不應在生產環境中啟用。|
|Debug |1 |LogDebug|用於偵錯工具和開發。 請在生產環境中小心使用,因為有大量的數量。 |
|Information |2 |LogInformation| 追蹤應用程式的一般流程。 可能具有長期值。|
|Waring |3 |LogWarning| 針對異常或非預期的事件。 通常會包含不會導致應用程式失敗的錯誤或狀況。|
|Error |4 |LogWarning| 發生無法處理的錯誤和例外狀況。 這些訊息表示目前的作業或要求失敗,而不是整個應用程式的失敗。|
|Critical |5 |LogWarning|發生需要立即注意的失敗。 範例:資料遺失情況、磁碟空間不足。 |
|None |6 | | 指定記錄類別不應寫入任何訊息。|

第三方紀錄提供者

elmah.io (GitHub Repository)
Gelf (GitHub Repository)
JSNLog (GitHub Repository)
KissLog.net (GitHub Repository)
Log4NetGitHub Repository
NLog (GitHub Repository)
Serilog (GitHub Repository)

透過良好設計記錄管理設計,可以有效的紀錄應用程式相關資訊,為管理應用程式的運行更增加效率。

參考文章
.NET Core 與 ASP.NET Core 中的記錄


上一篇
[Day15] 例外事件處理 - 我與 ASP.NET Core 3 的 30天
下一篇
[Day17] Serilog & Seq 為你打造良好的Log管理環境- 我與 ASP.NET Core 3 的 30天
系列文
我與 ASP.NET Core 的 30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言